home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / MacMETH 3.2.1 / Sources / MacC2.6 / M2DM.DEF < prev    next >
Encoding:
Modula Definition  |  1992-05-29  |  6.1 KB  |  134 lines  |  [TEXT/MEDT]

  1. DEFINITION MODULE M2DM; (* NW 23.3.85; WH 22.5.85 / 9.1.86  *)
  2.                         (* HS 19.4.85 / 31.5.86 / 19.12.91 *)
  3.  
  4.   FROM SYSTEM IMPORT ADDRESS;
  5.  
  6.   CONST   WordSize   =     16;
  7.           MaxChar    =   377C;
  8.           MaxCard    =  65535;
  9.           MinInt     = -32767 - 1;
  10.           MaxInt     =  32767;
  11.           MinDouble  =  80000000H;
  12.           MaxDouble  =  7FFFFFFFH;
  13.           NilVal     =     0D;
  14.  
  15.   TYPE    ObjPtr     = POINTER TO Object;
  16.           StrPtr     = POINTER TO Structure;
  17.           ParPtr     = POINTER TO Parameter;
  18.           PDPtr      = POINTER TO PDesc;
  19.           KeyPtr     = POINTER TO Key;
  20.  
  21.           ObjClass   = (Header, Const, Typ, Var, Field, Proc, Code, Module, Temp);
  22.  
  23.           (* Note:   for scalar types:     form <= Double        *)
  24.           (*         for subrange types:   RBaseTyp^.form < form *)
  25.           (*         for structured types: form > Opaque         *)
  26.           StrForm  = (Undef, Bool, Char, Card, CardInt, Int, Enum, LCard, Double,
  27.                       Range, Real, LongReal, Pointer, Set, ProcTyp, Opaque,
  28.                       String, Array, Record);
  29.  
  30.           (* Note:   basic standard procedures :   Abs  .. Val    *)
  31.           (*         supplementary procedures  :   XAsh .. Round  *)
  32.           Standard   = (Abs, Adr, Cap, Chr, Dec, Excl, Float, FloatD, Halt,
  33.                         High, Inc, Incl, Inline, Long, Max, Min, Odd, Ord,
  34.                         Reg, Setreg, Shift, Short, Size, Tsize, Trunc, TruncD, Val,
  35.                         XAsh, XLsh, XRot, XMsk, XCom, Sqrt, Entier, Round, NonStand);
  36.  
  37.           ConstValue = RECORD
  38.                          CASE :StrForm OF
  39.                            Undef:               U:  LONGINT;
  40.                          | Bool:                B:  BOOLEAN;
  41.                          | Char, Enum:          Ch: CHAR;
  42.                                              prev:  ObjPtr;
  43.                          | Card, CardInt:       C:  CARDINAL;
  44.                          | Int:                 I:  INTEGER;
  45.                          | LCard, Double:       D:  LONGINT;
  46.                          | Real:                R:  REAL;
  47.                          | Set:                 S:  BITSET;
  48.                          | String:  D0, D1, D2, D3: INTEGER;
  49.                          | LongReal:            X:  LONGREAL;
  50.                          (* M2RM assumes correct overlaying of X *)
  51.                          (* with the fields D0, D1, D2 and D3.   *)
  52.                          END;
  53.                        END;
  54.  
  55.           PDesc      = RECORD
  56.                          forward, exp: BOOLEAN;
  57.                          num, lev, adr, size, endAdr: INTEGER;
  58.                        END;
  59.  
  60.           Object     = RECORD
  61.                          name:     INTEGER;  (* index to name buffer *)
  62.                          typ:      StrPtr;
  63.                          left,
  64.                          right,
  65.                          next:     ObjPtr;
  66.                          exported: BOOLEAN;
  67.                          CASE class: ObjClass OF
  68.                            Header: kind:       ObjClass;  (* Typ, Proc, Module *)
  69.                                    last, heap: ObjPtr;
  70.                                    withadr:    INTEGER;
  71.                          | Const:  conval:     ConstValue;
  72.                          | Typ:    mod:        ObjPtr;
  73.                          | Var:    varpar:     BOOLEAN;
  74.                                    vmod, vlev,
  75.                                    vadr:       INTEGER;
  76.                          | Field:  offset:     INTEGER;
  77.                          | Proc:   pd:         PDPtr;
  78.                                    firstParam: ParPtr;
  79.                                    firstLocal: ObjPtr;
  80.                                    pmod:       INTEGER;
  81.                          | Code:   cd:         PDPtr;
  82.                                    firstArg:   ParPtr;
  83.                                    std:        Standard;
  84.                                    cnum:       CARDINAL;
  85.                          | Module: key:        KeyPtr;
  86.                                    firstObj,
  87.                                    root:       ObjPtr;
  88.                                    modno:      INTEGER;
  89.                          | Temp:   baseref:    INTEGER;
  90.                          END;
  91.                        END;
  92.  
  93.           Structure  = RECORD
  94.                          strobj: ObjPtr;  (* object (type) naming structure *)
  95.                          size, ref: INTEGER;
  96.                          CASE form: StrForm OF
  97.                          | Undef, Bool, Char, Card, CardInt, Int,
  98.                            LCard, Double, Real, LongReal, String:
  99.                          | Enum:    ConstLink: ObjPtr;
  100.                                     NofConst:  INTEGER;
  101.                          | Range:   RBaseTyp:  StrPtr;
  102.                                     min, max,
  103.                                     BndAdr:    INTEGER;
  104.                          | Pointer: PBaseTyp:  StrPtr;
  105.                                     BaseId:    INTEGER;  (* forward refs *)
  106.                          | Set:     SBaseTyp:  StrPtr;
  107.                          | Array:   ElemTyp,
  108.                                     IndexTyp:  StrPtr;
  109.                                     dyn:       BOOLEAN;
  110.                          | Record:  firstFld:  ObjPtr;
  111.                          | ProcTyp: firstPar:  ParPtr;
  112.                                     resTyp:    StrPtr;
  113.                          | Opaque:  (* no field *)
  114.                          END;
  115.                        END;
  116.  
  117.           Parameter  = RECORD
  118.                          name: INTEGER; varpar: BOOLEAN; typ: StrPtr; next: ParPtr;
  119.                        END;
  120.           Key        = RECORD k0, k1, k2: INTEGER END;
  121.  
  122.   VAR     mainmod, sysmod: ObjPtr;
  123.           notyp, undftyp, booltyp, chartyp, cardtyp, cardinttyp, inttyp,
  124.           bitstyp, lcardtyp, dbltyp, realtyp, lrltyp, proctyp, stringtyp,
  125.           addrtyp, wordtyp, bytetyp: StrPtr;
  126.           rngchk    : BOOLEAN;
  127.           ovflchk   : BOOLEAN;
  128.  
  129.   PROCEDURE ALLOCATE(VAR a: ADDRESS; n: CARDINAL);
  130.   PROCEDURE Available(): CARDINAL;
  131.   PROCEDURE ResetHeap(a: ADDRESS);
  132.  
  133. END M2DM. (* Copyright Departement Informatik, ETH Zuerich, Switzerland, 1992 *)
  134.